/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao.impl;

import dao.Conexao;
import dao.PortalDAOException;
import dao.UsuarioDAO;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import model.Usuario;

/**
 *
 * @author Tadeu Augusto
 */
public class UsuarioDAOImpl implements UsuarioDAO{
    
    private Connection conn;
    
    public UsuarioDAOImpl()throws PortalDAOException{
        try {
            conn = Conexao.getConnection();
        } catch (Exception e) {
            throw new PortalDAOException("Erro: \n" + e.getMessage());
        }
    }
    
    @Override
    public void atualizar(Usuario usuario)throws PortalDAOException{
        PreparedStatement ps = null;
        Connection conn1 = null;
        if(usuario == null) {
            throw new PortalDAOException("Nenhum usuário informado.");
        }
        try {
            String sql = "UPDATE usuario SET nome=?, sobrenome=?, email=?, senha=?, " +
                    "cep=?, complendereco=? WHERE cpfcnpj=?";
            conn1 = conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, usuario.getNome());
            ps.setString(2, usuario.getSobrenome());
            ps.setString(3, usuario.getEmail());
            ps.setString(4, usuario.getSenha());
            ps.setString(5, usuario.getCep());
            ps.setString(6, usuario.getComplendereco());
            ps.setString(7, usuario.getCpfcnpj());
            ps.executeUpdate();
        } catch (SQLException e) {
            throw new PortalDAOException("Erro ao atualizar o usuário. \n" + e);
        } finally{
            Conexao.closeConnection(conn1, ps);
        }
    }
    
    @Override
    public void excluir(Usuario usuario)throws PortalDAOException{
        PreparedStatement ps = null;
        Connection conn1 = null;
        if (usuario == null) {
            throw new PortalDAOException("Usuário não informado.");
        }
        try {
            String sql = "DELETE FROM usuario WHERE cpfcnpj=?";
            conn1 = conn;
            ps = conn1.prepareStatement(sql);
            ps.executeUpdate();
        } catch (SQLException e) {
            throw new PortalDAOException("Erro ao excluir usuário. \n" + e);
        } finally {
            Conexao.closeConnection(conn1, ps);
        }
    }
    
    @Override
    public Usuario procurarUsuario(String cpfcnpj)throws PortalDAOException{
        PreparedStatement ps = null;
        Connection conn1 = null;
        ResultSet rs = null;
        Usuario usuario = new Usuario();
        if(cpfcnpj == null || cpfcnpj.equals("")){
            throw new PortalDAOException("CPF ou CNPJ não informado.");
        }
        try {
            String sql = "SELECT * FROM usuario WHERE cpfcnpj=?";
            conn1 = conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, cpfcnpj);
            rs = ps.executeQuery();
            while (rs.next()) {                
                usuario = new Usuario(rs.getString("cpfcnpj"), rs.getString("nome"), rs.getString("sobrenome"),
                        rs.getString("email"), rs.getString("senha"), rs.getString("cep"),
                        rs.getString("complendereco"));
            }
            return usuario;
        } catch (SQLException e) {
            throw new PortalDAOException("Erro ao buscar usuário. \n" + e);
        }finally{
            Conexao.closeConnection(conn1, ps, rs);
        }
    }
    
    @Override
    public Usuario procurarUsuario(String cpfcnpj, String senha)throws PortalDAOException{
        PreparedStatement ps = null;
        Connection conn1 = null;
        ResultSet rs = null;
        Usuario usuario = new Usuario();
        if(cpfcnpj == null || cpfcnpj.equals("") || senha == null || senha.equals("")) {
            throw new PortalDAOException("Usuário ou senha não informados.");
        }
        try {
            String sql = "SELECT * FROM usuario WHERE cpfcnpj=? AND senha=?";
            conn1 = conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, cpfcnpj);
            ps.setString(2, senha);
            rs = ps.executeQuery();
            while (rs.next()) {                
                usuario = new  Usuario(rs.getString("cpfcnpj"), rs.getString("nome"), rs.getString("sobrenome"),
                        rs.getString("email"), rs.getString("senha"), rs.getString("cep"),
                        rs.getString("complendereco"));
            }
            return usuario;
        } catch (SQLException e) {
            throw new PortalDAOException("Erro ao buscar usuário. \n" + e);
        } finally{
            Conexao.closeConnection(conn1, ps, rs);
        }
    }
    
    @Override
    public void salvar(Usuario usuario) throws PortalDAOException{
        PreparedStatement ps = null;
        Connection conn1 = null;
        if (usuario == null) {
            throw new PortalDAOException("Usuário não informado.");
        }
        try {
            String sql = "INSERT INTO usuario (cpfcnpj, nome, sobrenome, email, senha, " +
                    "cep, complendereco) values(?,?,?,?,?,?,?)";
            conn1 = conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, usuario.getCpfcnpj());
            ps.setString(2, usuario.getNome());
            ps.setString(3, usuario.getSobrenome());
            ps.setString(4, usuario.getEmail());
            ps.setString(5, usuario.getSenha());
            ps.setString(6, usuario.getCep());
            ps.setString(7, usuario.getComplendereco());
            ps.executeUpdate();
        } catch (SQLException e) {
            throw new PortalDAOException("Erro ao cadastrar Usuário. \n" + e);
        } finally{
            Conexao.closeConnection(conn1, ps);
        }
    }
    
    @Override
    public List<Usuario> todosUsuarios()throws PortalDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        ResultSet rs = null;
        try {
            String sql = "SELECT * FROM usuario ";
            conn1 = conn;
            ps = conn1.prepareStatement(sql);
            rs = ps.executeQuery();
            List<Usuario> usuarios = new ArrayList<Usuario>();
            while (rs.next()) {                
                Usuario user = new Usuario(rs.getString("cpfcnpj"), rs.getString("nome"), rs.getString("sobrenome"),
                        rs.getString("email"), rs.getString("senha"), rs.getString("cep"),
                        rs.getString("complendereco"));
                usuarios.add(user);
            }
            return usuarios;
        } catch (SQLException e) {
            throw new PortalDAOException("Erro ao buscar usuário. \n" + e);
        }finally{
            Conexao.closeConnection(conn1, ps, rs);
        }
    }
}
